package TCP;

import javax.swing.*;

/**
 * Day08_TestThread 类用于演示线程卖票的示例。
 * 这个示例创建了一个可运行的类RunnableDemo，它实现了Runnable接口，通过重写run方法来定义卖票逻辑。
 * 通过三个线程来模拟三个售票窗口同时卖票的过程，展示了多线程并发控制的基本使用。
 *
 * @author Cheng-02
 * @version V1.0
 * @since 2024/4/3
 */
public class Day08_TestRunnable {
    public static void main(String[] args) {
        // 创建RunnableDemo实例并用它来启动三个线程
        RunnableDemo r1 = new RunnableDemo();
        Thread t1 = new Thread(r1, "窗口1");
        Thread t2 = new Thread(r1, "窗口2");
        Thread t3 = new Thread(r1, "窗口3");
        t1.start(); // 启动窗口1的线程
        t2.start(); // 启动窗口2的线程
        t3.start(); // 启动窗口3的线程
    }
}

class RunnableDemo extends JFrame implements Runnable{
    // 定义票数
    int ticket = 100;

    /**
     * run方法是线程的入口点，这里模拟了卖票的过程。
     * 通过synchronized关键字控制对票数的访问，以避免并发问题。
     */
    @Override
    public void run() {
        // 尝试让当前线程暂停1000毫秒，以模拟售票过程的延时
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (this) {
                // 当票数小于等于 0 时，结束卖票操作
                if (ticket <= 0) {
                    break;
                }
                // 输出卖票信息，并递减票数
                System.out.println(Thread.currentThread().getName() + "卖了" + ticket + "张票");
                ticket--;
            }
        }
    }
    public void AccessibleJFrame(){

    }
}
